package com.xbongbong.pro.service.toolbox.sms;


import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.xbongbong.paas.toolbox.exception.XbbException;
import com.xbongbong.paas.toolbox.util.DateUtil;
import com.xbongbong.paas.toolbox.util.OkHttpUtil;
import com.xbongbong.pro.sms.model.SmsStatusModel;
import com.xbongbong.saas.domain.entity.SmsStatusEntity;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;

import java.io.UnsupportedEncodingException;
import java.util.HashMap;
import java.util.Map;

/**
 * 用于发送通知类 短信审核
 * @author chb -xbongbong.com
 * @time 2017-6-15 下午5:43:48
 */

@Component
public class SMSMarketService {

	private static final Logger LOG = LoggerFactory.getLogger(SMSMarketService.class);

	/**
	 * 应用地址
	 */
	public static final String URI = "http://smssh1.253.com/msg/send/json";
	/**
	 * 账号
	 */
	public static final  String ACCOUNT = "M1252607";
	/**
	 * 密码
	 */
	public static final  String PSWD = "2lywWNBgCZfb66";
	/**
	 * 2.5拉取状态报告
	 */
	public static final String GET_STATUS_URI ="http://smssh1.253.com/msg/pull/report";

	/**
	 * 上海创蓝文化 ，仅用于发送验证码和通知
	 * @param mobiles
	 * @param content
	 * @return
	 */
	public static JSONObject sendSMS(String mobiles,String content) {
 
		SmsSendRequest smsSingleRequest = new SmsSendRequest(ACCOUNT, PSWD, content, mobiles);
		String requestJson = JSON.toJSONString(smsSingleRequest);
		
		String ret = OkHttpUtil.post( URI, requestJson);
		return JSONObject.parseObject(ret);
	}
	
	
	/**
	 * 上海创蓝文化 ，查询短信发送状态 如果管理员设置用户账号需要主动拉取，
	 * 则用户可以通过上面的URL拉取其发送短信的状态报告。数据拉取成功后服务器会删除当前拉取成功的数据，不再保存！请用户及时存储。此状态报告保存时间为72小时，最大存储10万条
	 * @param  
	 * @param  
	 * @return 响应数据格式：
		{"ret": 0,
		"result": [{
		"msgId":"16110916241729948",
		"reportTime":"1611091624",
		"mobile":"15700000004",
		"status":"DELIVRD",
		"statusDesc":"用户短信接收成功"
		}]}
		ret：请求状态。0成功，其他状态为失败
		result：状态明细结果，没结果则返回空数组
	 */
	public static JSONObject getStatus() {
		Map<String,Object> param = new HashMap<String,Object>(16);
		param.put("account", ACCOUNT);
		param.put("password",PSWD);
		param.put("count",100); 
		String ret = OkHttpUtil.post( GET_STATUS_URI, JSON.toJSONString(param));
		return JSONObject.parseObject(ret);
	}
	
	/**
	 * 从创蓝获取短信的发送状态，并入库，循环遍历，直到服务器没有数据，不区分公司
	 * @param smsStatusModel
	 * @return
	 * @author chb
	 * @time 2017-6-16 下午8:32:45
	 */
	public static int saveStatus(SmsStatusModel smsStatusModel ) {
		/**
		 * 保存了多少条状态
		 */
		int retInd = 0 ;
		JSONObject ret = null;
		Integer retCode = 0;
		while (true){
			/**
			 * 获取数据
			 */
			ret =getStatus();
			
			if(ret == null){
				break;
			}
			retCode = ret.getInteger("ret");
			if(retCode ==null || retCode !=0){
				break;
			}
			JSONArray retArray = ret.getJSONArray("result");
			if(retArray == null ||  retArray.isEmpty()){
				break;
			}
			
			JSONObject retOne;
			String msgId,status,statusDesc;
			
			for(int i=0;i<retArray.size();i++){
				retOne = retArray.getJSONObject(i);
				
				msgId = retOne.getString("msgId");
				status = retOne.getString("status");
				statusDesc = retOne.getString("statusDesc");
				
				SmsStatusEntity smsStatusEntity = smsStatusModel.getByMsgId(msgId);
				
				smsStatusEntity.setStatusCode(status);
				smsStatusEntity.setStatusMemo(statusDesc);
				smsStatusEntity.setUpdateTime((long)DateUtil.getInt());
				try {
					smsStatusModel.update(smsStatusEntity);
				} catch (XbbException e) {
					LOG.error("更新短信状态失败", e);
				}
			}
			
			
		}
		
		return 0;
	}
	
	
	
	public static JSONObject sendCode(String mobiles,String code) {
		String content = "亲爱的用户您好，您的验证码为"+code+"，请于10分钟内完成验证。";
		return sendSMS(mobiles, content);
	}

	public static JSONObject sendInvitation(String mobiles,String userName,String receiver ,String companyName){
		String url = "http://t.cn/RakNxKp";
		String content = receiver+"您好，"+userName+"邀请您加入"+companyName+"，请您尽快安装销帮帮:" + url;
		return sendSMS(mobiles, content);
	}
	 
	
	 
	 
	// TODO 暂时移除 OApiException错误信息
	public static void main(String argc[]) throws UnsupportedEncodingException {
		//String content = "亲爱的用户您好，您的验证码为123456，请于5分钟内完成验证。";
//		SMSService.chanZorSMS("18667015086,18368188674",content);
		//sendSMS("13738170345", content);
		
		
		// 普通短信地址
			 
				// 短信内容{s}
		//					       【中国房协】您好，根据中国房协杂志工作安排，7月组织日本休闲农业在地探索之旅第二季+特色小镇开发运营研讨会第三季•深圳站，诚邀您参加，咨询{s}谢谢。回复TD退订
 			    String msg = "【中国房协】您好，根据中国房协杂志工作安排，7月组织日本休闲农业在地探索之旅第二季+特色小镇开发运营研讨会第三季•深圳站，诚邀您参加，咨询010-62142688、13020042293谢谢。回复TD退订";
 			    msg="【会员专享】您好，根据中国房协杂志工作安排，7月组织日本休闲农业在地探索之旅第二季+特色小镇开发运营研讨会第三季•深圳站，诚邀您参加，咨询11谢谢。回TD退订";
//				//手机号码
 				String phone = "13738170345";
//				
//				SmsSendRequest smsSingleRequest = new SmsSendRequest(account, pswd, msg, phone);
//				
//				String requestJson = JSON.toJSONString(smsSingleRequest);
//
//				
//				String ret;
//			 
//				ret = HttpUtil.post( uri, requestJson,"json");
//
//				
//				SmsSendResponse smsSingleResponse = JSONObject.parseObject(ret , SmsSendResponse.class);
				
				
	}
}

 
